﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Elysium.Demo;
using SIIE_ERP.Codigo;
using Microsoft.Office.Interop.Excel;
using SIIE_ERP.Codigo.Configuracion;
using SIIE_ERP.BaseDatos.Inventarios.Catalogos;
using SIIE_ERP.BaseDatos.Configuracion;
using SIIE_ERP.BaseDatos;
using System.Data;

namespace Elysium.Demo.Configuracion
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class CargaDatos_Articulo2 : UserControl
    {
        private UsuarioActivo _sesion;
        private int Id_Grupo;

        public CargaDatos_Articulo2(ref UsuarioActivo usuario)
        {
            InitializeComponent();
            this._sesion = usuario;  
        }

        private void ButtonInformacion_Click_1(object sender, RoutedEventArgs e)
        {
            WindowAyuda Ayuda = new Elysium.Demo.WindowAyuda("CargaDatos.htm", "Ayuda");

            Ayuda.Owner = SIIE_ERP.View.NavegacionUI.GetParentWindow(this); Ayuda.ShowDialog();
        }

        private void ButtonRegresar_Click_1(object sender, RoutedEventArgs e)
        {
            ((ScrollViewer)this.Parent).Content = new CargaDatos_Articulo1(ref _sesion);
        }

        private void Busqueda_Click_1(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();

            dlg.DefaultExt = ".xlsx";
            dlg.Filter = "Excel Files (*.xlsx)|*.xlsx";

            // Muestra el Open File Dialog
            Nullable<bool> result = dlg.ShowDialog();

            // Obtiene el archivo
            if (result == true)
            {
                TextBox_Busqueda.Text = dlg.FileName;
            }
            else
            {
                MessageBox.Show("Se canceló la Selección.");
            }
        }

        private void Button_Guardar_Click(object sender, RoutedEventArgs e)
        {
            if (String.IsNullOrEmpty(TextBox_Busqueda.Text))
            {
                MessageBox.Show("Favor de seleccionar un archivo");
            }
            else
            {
                try
                {
                    dbo_Cat_Articulo art = new dbo_Cat_Articulo(_sesion.RFC, _sesion.UserName);
                    dbo_CargaDatos CargaDatos_Obj = new dbo_CargaDatos(_sesion.RFC, _sesion.UserName);
                    bool IsValid = true;

                    Microsoft.Office.Interop.Excel.Application xlsApp = default(Microsoft.Office.Interop.Excel.Application);
                    Workbook xlsWB = default(Workbook);
                    Worksheet xlsSheet = default(Worksheet);
                    Range xlsCell = default(Range);

                    xlsApp = new Microsoft.Office.Interop.Excel.Application();
                    xlsApp.Visible = false;
                    xlsWB = xlsApp.Workbooks.Open(TextBox_Busqueda.Text);
                    xlsSheet = xlsWB.Worksheets[1];

                    xlsCell = xlsSheet.Range["A1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Clave del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["B1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Nombre del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["C1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Descripción del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["D1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Producto / Servicio")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["E1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Código de Barras del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["F1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Marca del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["G1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Grupo de Producto del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["H1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("SubGrupo de Producto del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["I1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Línea  de Producto del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["J1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Color del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["K1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Talla del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["L1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Unidad de Medida del Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["M1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("¿Artículo Disponible Para venta?")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["N1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("¿Artículo Descontinuado?")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["O1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Moneda en la que se vende el Artículo")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["P1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Precio de Lista del Artículo (Con Impuesto):")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["Q1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Precio Mínimo del Artículo (Con Impuesto):")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["R1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Costo Estándar del Artículo:")))
                    {
                        IsValid = false;
                    }

                    xlsCell = xlsSheet.Range["S1"];
                    if (!(xlsCell.Text.ToString().Trim().Equals("Tasa de Impuesto del Artículo:")))
                    {
                        IsValid = false;
                    }

                    if (!(IsValid))
                    {
                        MessageBox.Show("El documento seleccionado tiene un formato incorrecto. Favor de Verificar.");
                        xlsWB.Close();                        

                        return;
                    }

                    List<CargaDatos_Articulo> MiLista = new List<CargaDatos_Articulo>();
                    
                    for (int index = 2; index <= 1000000; index++)
                    {
                        Range Blank1 = default(Range);
                        Range Blank2 = default(Range);
                        Range Blank3 = default(Range);
                        Range Blank4 = default(Range);
                        Range Blank5 = default(Range);

                        Blank1 = xlsSheet.Range["A" + index.ToString()];
                        Blank2 = xlsSheet.Range["A" + (index + 1).ToString()];
                        Blank3 = xlsSheet.Range["A" + (index + 2).ToString()];
                        Blank4 = xlsSheet.Range["A" + (index + 3).ToString()];
                        Blank5 = xlsSheet.Range["A" + (index + 4).ToString()];

                        if ((string.IsNullOrEmpty(Blank1.Text.ToString().Trim()) && string.IsNullOrEmpty(Blank2.Text.ToString().Trim()) && string.IsNullOrEmpty(Blank3.Text.ToString().Trim()) && string.IsNullOrEmpty(Blank4.Text.ToString().Trim()) && string.IsNullOrEmpty(Blank5.Text.ToString().Trim())))
                        {
                            break;
                        }

                        Range Column1 = default(Range);
                        Range Column2 = default(Range);
                        Range Column3 = default(Range);
                        Range Column4 = default(Range);
                        Range Column5 = default(Range);
                        Range Column6 = default(Range);
                        Range Column7 = default(Range);
                        Range Column8 = default(Range);
                        Range Column9 = default(Range);
                        Range Column10 = default(Range);
                        Range Column11 = default(Range);
                        Range Column12 = default(Range);
                        Range Column13 = default(Range);
                        Range Column14 = default(Range);
                        Range Column15 = default(Range);
                        Range Column16 = default(Range);
                        Range Column17 = default(Range);
                        Range Column18 = default(Range);
                        Range Column19 = default(Range);

                        Column1 = xlsSheet.Range["A" + index.ToString()];
                        Column2 = xlsSheet.Range["B" + index.ToString()];
                        Column3 = xlsSheet.Range["C" + index.ToString()];
                        Column4 = xlsSheet.Range["D" + index.ToString()];
                        Column5 = xlsSheet.Range["E" + index.ToString()];
                        Column6 = xlsSheet.Range["F" + index.ToString()];
                        Column7 = xlsSheet.Range["G" + index.ToString()];
                        Column8 = xlsSheet.Range["H" + index.ToString()];
                        Column9 = xlsSheet.Range["I" + index.ToString()];
                        Column10 = xlsSheet.Range["J" + index.ToString()];
                        Column11 = xlsSheet.Range["K" + index.ToString()];
                        Column12 = xlsSheet.Range["L" + index.ToString()];
                        Column13 = xlsSheet.Range["M" + index.ToString()];
                        Column14 = xlsSheet.Range["N" + index.ToString()];
                        Column15 = xlsSheet.Range["O" + index.ToString()];
                        Column16 = xlsSheet.Range["P" + index.ToString()];
                        Column17 = xlsSheet.Range["Q" + index.ToString()];
                        Column18 = xlsSheet.Range["R" + index.ToString()];
                        Column19 = xlsSheet.Range["S" + index.ToString()];

                        CargaDatos_Articulo MiArticulo = new CargaDatos_Articulo();

                        MiArticulo.ClaveArticulo = Column1.Text.ToString().Trim();
                        MiArticulo.NombreArticulo = Column2.Text.ToString().Trim();
                        MiArticulo.DescripcionArticulo = Column3.Text.ToString().Trim();
                        MiArticulo.ProductoServicio = Column4.Text.ToString().Trim();
                        MiArticulo.CodigoBarrasArticulo = Column5.Text.ToString().Trim();
                        MiArticulo.MarcarArticulo = Column6.Text.ToString().Trim();
                        MiArticulo.GrupoProdArticulo = Column7.Text.ToString().Trim();
                        MiArticulo.SubGrupoProdArticulo = Column8.Text.ToString().Trim();
                        MiArticulo.LineaProdArticulo = Column9.Text.ToString().Trim();
                        MiArticulo.ColorArticulo = Column10.Text.ToString().Trim();
                        MiArticulo.TallaArticulo = Column11.Text.ToString().Trim();
                        MiArticulo.UM_Articulo = Column12.Text.ToString().Trim();
                        MiArticulo.ArticuloDisponibleVenta = Column13.Text.ToString().Trim();
                        MiArticulo.ArticuloDescontinuado = Column14.Text.ToString().Trim();
                        MiArticulo.MonedaArticulo = Column15.Text.ToString().Trim();

                        try
                        {
                            MiArticulo.PrecioListaArticulo = double.Parse(Column16.Text.ToString().Trim());
                        }
                        catch (Exception)
                        {
                            MiArticulo.PrecioListaArticulo = 0;
                        }

                        try
                        {
                            MiArticulo.PrecioMinArticulo = double.Parse(Column17.Text.ToString().Trim());
                        }
                        catch (Exception)
                        {
                            MiArticulo.PrecioMinArticulo = 0;
                        }

                        try
                        {
                            MiArticulo.CostoEstandarArticulo = double.Parse(Column18.Text.ToString().Trim());
                        }
                        catch (Exception)
                        {
                            MiArticulo.CostoEstandarArticulo = 0;
                        }

                        try
                        {
                            MiArticulo.TasaImpuestoArticulo = double.Parse(Column19.Text.ToString().Trim());

                            if ((MiArticulo.TasaImpuestoArticulo < 0 || MiArticulo.TasaImpuestoArticulo > 100))
                            {
                                MiArticulo.TasaImpuestoArticulo = 0;
                            }

                        }
                        catch (Exception)
                        {
                            MiArticulo.TasaImpuestoArticulo = 0;
                        }

                        if ((MiArticulo.ClaveArticulo.Length > 7))
                        {
                            MiArticulo.ClaveArticulo = MiArticulo.ClaveArticulo.Substring(0, 7);
                        }

                        if ((MiArticulo.NombreArticulo.Length > 1024))
                        {
                            MiArticulo.NombreArticulo = MiArticulo.NombreArticulo.Substring(0, 1024);
                        }

                        if ((MiArticulo.DescripcionArticulo.Length > 2024))
                        {
                            MiArticulo.DescripcionArticulo = MiArticulo.DescripcionArticulo.Substring(0, 2024);
                        }

                        if ((MiArticulo.CodigoBarrasArticulo.Length > 50))
                        {
                            MiArticulo.CodigoBarrasArticulo = MiArticulo.CodigoBarrasArticulo.Substring(0, 50);
                        }

                        if ((MiArticulo.MarcarArticulo.Length > 50))
                        {
                            MiArticulo.MarcarArticulo = MiArticulo.MarcarArticulo.Substring(0, 50);
                        }

                        if ((MiArticulo.GrupoProdArticulo.Length > 50))
                        {
                            MiArticulo.GrupoProdArticulo = MiArticulo.GrupoProdArticulo.Substring(0, 50);
                        }

                        if ((MiArticulo.SubGrupoProdArticulo.Length > 50))
                        {
                            MiArticulo.SubGrupoProdArticulo = MiArticulo.SubGrupoProdArticulo.Substring(0, 50);
                        }

                        if ((MiArticulo.LineaProdArticulo.Length > 50))
                        {
                            MiArticulo.LineaProdArticulo = MiArticulo.LineaProdArticulo.Substring(0, 50);
                        }

                        if ((MiArticulo.ColorArticulo.Length > 50))
                        {
                            MiArticulo.ColorArticulo = MiArticulo.ColorArticulo.Substring(0, 50);
                        }

                        if ((MiArticulo.TallaArticulo.Length > 50))
                        {
                            MiArticulo.TallaArticulo = MiArticulo.TallaArticulo.Substring(0, 50);
                        }

                        if ((MiArticulo.UM_Articulo.Length > 50))
                        {
                            MiArticulo.UM_Articulo = MiArticulo.UM_Articulo.Substring(0, 50);
                        }

                        MiArticulo.RFC = _sesion.RFC;
                        MiArticulo.IsValid = true;

                        if ((string.IsNullOrEmpty(MiArticulo.ClaveArticulo) || string.IsNullOrEmpty(MiArticulo.ClaveArticulo)))
                        {
                            MiArticulo.IsValid = false;
                        }
                        if ((string.IsNullOrEmpty(MiArticulo.NombreArticulo) || string.IsNullOrEmpty(MiArticulo.NombreArticulo)))
                        {
                            MiArticulo.IsValid = false;
                        }
                        if ((string.IsNullOrEmpty(MiArticulo.GrupoProdArticulo) || string.IsNullOrEmpty(MiArticulo.GrupoProdArticulo)))
                        {
                            MiArticulo.IsValid = false;
                        }
                        if ((string.IsNullOrEmpty(MiArticulo.SubGrupoProdArticulo) || string.IsNullOrEmpty(MiArticulo.SubGrupoProdArticulo)))
                        {
                            MiArticulo.IsValid = false;
                        }
                        if ((string.IsNullOrEmpty(MiArticulo.LineaProdArticulo) || string.IsNullOrEmpty(MiArticulo.LineaProdArticulo)))
                        {
                            MiArticulo.IsValid = false;
                        }
                        if ((string.IsNullOrEmpty(MiArticulo.ColorArticulo) || string.IsNullOrEmpty(MiArticulo.ColorArticulo)))
                        {
                            MiArticulo.IsValid = false;
                        }
                        if ((string.IsNullOrEmpty(MiArticulo.TallaArticulo) || string.IsNullOrEmpty(MiArticulo.TallaArticulo)))
                        {
                            MiArticulo.IsValid = false;
                        }
                        if ((string.IsNullOrEmpty(MiArticulo.UM_Articulo) || string.IsNullOrEmpty(MiArticulo.UM_Articulo)))
                        {
                            MiArticulo.IsValid = false;
                        }

                        if (!(MiArticulo.ProductoServicio.Equals("Producto") || MiArticulo.ProductoServicio.Equals("Servicio")))
                        {
                            MiArticulo.ProductoServicio = "Producto";
                        }

                        if ((MiArticulo.LineaProdArticulo.Equals("000") || MiArticulo.ColorArticulo.Equals("000") || MiArticulo.TallaArticulo.Equals("000")))
                        {
                            MiArticulo.LineaProdArticulo = "Sin Línea";
                            MiArticulo.TallaArticulo = "Sin Talla";
                            MiArticulo.ColorArticulo = "Sin Color";
                        }

                        if (!(MiArticulo.ArticuloDisponibleVenta.Equals("Si") || MiArticulo.ArticuloDisponibleVenta.Equals("No")))
                        {
                            MiArticulo.ArticuloDisponibleVenta = "Si";
                        }

                        if (!(MiArticulo.ArticuloDescontinuado.Equals("Si") || MiArticulo.ArticuloDescontinuado.Equals("No")))
                        {
                            MiArticulo.ArticuloDescontinuado = "No";
                        }

                        if (!(MiArticulo.MonedaArticulo.Equals("PES") || MiArticulo.MonedaArticulo.Equals("USD") || MiArticulo.MonedaArticulo.Equals("EUR")))
                        {
                            MiArticulo.MonedaArticulo = "PES";
                        }

                        if ((from o in MiLista where MiArticulo.NombreArticulo.Equals(o.NombreArticulo) select o).Count() > 0) 
                        {
                            MiArticulo.IsValid = false;                            
                        }

                        if ((from o in MiLista where MiArticulo.ClaveArticulo.Equals(o.ClaveArticulo) && MiArticulo.LineaProdArticulo.Equals(o.LineaProdArticulo) && MiArticulo.TallaArticulo.Equals(o.TallaArticulo) && MiArticulo.ColorArticulo.Equals(o.ColorArticulo) select o).Count() > 0)
                        {
                            MiArticulo.IsValid = false;                            
                        }                        

                        //Existe Nombre                        
                        if(art.Get_Articulo_Por_Nombre(MiArticulo.NombreArticulo).Rows.Count > 0)
                            MiArticulo.IsValid = false;
                        
                        //Existe Clave                        
                        if (art.Get_Articulo_Por_Clave(MiArticulo.NombreArticulo).Rows.Count > 0)
                            MiArticulo.IsValid = false;

                        MiLista.Add(MiArticulo);
                    }

                    if ((MiLista.Count == 0))
                    {
                        MessageBox.Show("La plantilla no contenía información. Favor de volver a intentar.");
                        xlsWB.Close();                      
                        return;
                    }
                    
                    //Borramos los datos temporales existentes 
                    CargaDatos_Obj.DeleteTemporales();                    

                    //Obtenemos el Id del Grupo
                    Id_Grupo = CargaDatos_Obj.Articulo_NextIdGrupo();
                    
                    //Dim dt As DataTable = New DataTable()
                    System.Data.DataTable dt = new System.Data.DataTable();

                    dt.Columns.Add("ClaveArticulo");
                    dt.Columns.Add("NombreArticulo");
                    dt.Columns.Add("DescripcionArticulo");
                    dt.Columns.Add("ProductoServicio");
                    dt.Columns.Add("CodigoBarrasArticulo");
                    dt.Columns.Add("MarcarArticulo");
                    dt.Columns.Add("GrupoProdArticulo");
                    dt.Columns.Add("SubGrupoProdArticulo");
                    dt.Columns.Add("LineaProdArticulo");
                    dt.Columns.Add("ColorArticulo");
                    dt.Columns.Add("TallaArticulo");
                    dt.Columns.Add("UM_Articulo");
                    dt.Columns.Add("ArticuloDisponibleVenta");
                    dt.Columns.Add("ArticuloDescontinuado");
                    dt.Columns.Add("MonedaArticulo");
                    dt.Columns.Add("PrecioListaArticulo");
                    dt.Columns.Add("PrecioMinArticulo");
                    dt.Columns.Add("CostoEstandarArticulo");
                    dt.Columns.Add("TasaImpuestoArticulo");
                    dt.Columns.Add("IsValid");


                    foreach (CargaDatos_Articulo n in MiLista)
                    {
                        Respuesta r = CargaDatos_Obj.Articulo_Insert
                        (
                            _sesion.RFC,
                            Id_Grupo,
                            n.ClaveArticulo,
                            n.NombreArticulo,
                            n.DescripcionArticulo,
                            n.ProductoServicio,
                            n.CodigoBarrasArticulo,
                            n.MarcarArticulo,
                            n.GrupoProdArticulo,
                            n.SubGrupoProdArticulo,
                            n.LineaProdArticulo,
                            n.ColorArticulo,
                            n.TallaArticulo,
                            n.UM_Articulo,
                            n.ArticuloDisponibleVenta,
                            n.ArticuloDescontinuado,
                            n.MonedaArticulo,
                            n.PrecioListaArticulo,
                            n.PrecioMinArticulo,
                            n.CostoEstandarArticulo,
                            n.TasaImpuestoArticulo,
                            n.IsValid
                        );
                                                
                        DataRow dr = null;
                        dr = dt.NewRow();

                        dr["ClaveArticulo"] = n.ClaveArticulo;
                        dr["NombreArticulo"] = n.NombreArticulo;
                        dr["DescripcionArticulo"] = n.DescripcionArticulo;
                        dr["ProductoServicio"] = n.ProductoServicio;
                        dr["CodigoBarrasArticulo"] = n.CodigoBarrasArticulo;
                        dr["MarcarArticulo"] = n.MarcarArticulo;
                        dr["GrupoProdArticulo"] = n.GrupoProdArticulo;
                        dr["SubGrupoProdArticulo"] = n.SubGrupoProdArticulo;
                        dr["LineaProdArticulo"] = n.LineaProdArticulo;
                        dr["ColorArticulo"] = n.ColorArticulo;
                        dr["TallaArticulo"] = n.TallaArticulo;
                        dr["UM_Articulo"] = n.UM_Articulo;
                        dr["ArticuloDisponibleVenta"] = n.ArticuloDisponibleVenta;
                        dr["ArticuloDescontinuado"] = n.ArticuloDescontinuado;
                        dr["MonedaArticulo"] = n.MonedaArticulo;
                        dr["PrecioListaArticulo"] = n.PrecioListaArticulo;
                        dr["PrecioMinArticulo"] = n.PrecioMinArticulo;
                        dr["CostoEstandarArticulo"] = n.CostoEstandarArticulo;
                        dr["TasaImpuestoArticulo"] = n.TasaImpuestoArticulo;
                        dr["IsValid"] = n.IsValid;

                        dt.Rows.Add(dr);
                    }

                    xlsWB.Close();

                    ((ScrollViewer)this.Parent).Content = new CargaDatos_Articulo3(ref _sesion, ref dt);
                }
                catch (Exception)
                {
                    MessageBox.Show("Error");
                }
            }
        }
    }
}
